package com.huwei.data.manager;

import java.lang.reflect.Method;

/**
 * 数据源操作接口
 * @author huwei
 *
 */
public interface DataSourceOperation extends Comparable<DataSourceOperation>{
	
	/**
	 * 	实例对象在spring容器中的key值；
	 */
	String springKey();
	/**
	 * 	当前数据源的实例
	 */
	Object instance();
	/**
	 * 	当前数据源对象执行的优先级
	 */
	Integer order();
	/**
	 * 	当前方法是否被调用
	 */
	boolean isInvoke();
	/**
	 * 	清除调用标志
	 */
	void clearInvoke();
	/**
	 * 	当前方法被调用的次数
	 */
	int invokeCount();
	/**
	 * 	调用数据源对象当前方法 ，方法的调用可能会抛出执行异常；
	 * @throws RuntimeException 
	 */
	Object invokeCurrentMethod() throws RuntimeException;
	/**
	 * 	当前实例对象所从属的超级数据源接口，该接口是指用户所指定加载数据源接口包路径下的某一接口
	 * @return
	 */
	Class<?> interfaceClass();
	/**
	 * 当前参数
	 */
	Object[] currentParamters();
	/**
	 * 当前方法
	 */
	Method currentMethod();
	
	default int compareTo(DataSourceOperation dso) {
		return dso.order() == null || order() == null ? 1 : order() - dso.order(); 
	}
}
